/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package games.patience.core;

import commomgame.RulesOfMovement;
import commomgame.SubRegion;

/**
 *Classe que representa uma especialização de RulesOfMoviment, ou seja, esta extende a classe mãe.
 * Esta é responsável por controlar a movimentação das cartas que podem ser inseridas nas subregiãoes de Fundações, logo,
 * contem a implementação das regras de fundações.
 * @author Igo Amauri & Fernanda
 */
public class RulesOfFoundations extends RulesOfMovement {

    @Override
    public boolean verifyMovement(int value, String nipe, SubRegion originRegion, SubRegion targetRegion) {

        //Empilha :
        //se a pilha não estiver vazia, se as cartas sao do mesmo nipe e a movida for maior
        //se a pilha estiver vazia e se for As a carta movida (GUARDAR ordem dos nipes na regiao)

        if (this.isEmptyStack(targetRegion)) {
            if (this.isAs(originRegion)) {
                targetRegion.addCardInSubRegion(originRegion.selectCard(value, nipe));
                originRegion.removeCard(originRegion.selectCard(value, nipe));
                if (!originRegion.setOfCard.isEmpty()) {
                    originRegion.setOfCard.get(0).setIsShowed(true);
                }
                return true;
            }
        } else {
            if (targetRegion.showNipeTopOfSubRegion().equals(nipe)) {
                if (this.isAscendent(targetRegion, value)) {
                    targetRegion.addCardInSubRegion(originRegion.selectCard(value, nipe));
                    originRegion.removeCard(originRegion.selectCard(value, nipe));
                    if (!originRegion.setOfCard.isEmpty()) {
                        originRegion.setOfCard.get(0).setIsShowed(true);
                    }
                    return true;
                }
            } else {
                return false;
            }
        }
        return false;


    }
}
